// 调用方式        this 指向
// 普通函数        window
// 构造函数        实例对象，原型对象里面的方法也指向实例对象
// 对象的方法      该方法所属对象
// 绑定事件函数    绑定事件对象
// 定时器函数      window
// 立即执行函数    window
/* window  即顶级对象；在node中顶级对象为global */
//改变函数内部this指向
//1.call()方法   call() 方法调用一个对象。简单理解为调用函数的方式，但是它可以改变函数的 this 指向。
// fun.call(thisArg, arg1, arg2, ...);

/* 
参数说明：
thisArg：在 fun 函数运行时指定的 this 值
arg1，arg2：传递的其他参数
返回值就是函数的返回值，因为它就是调用函数
因此当我们想改变 this 指向，同时想调用这个函数的时候，可以使用 call，比如继承 */
let o = {
  name: 'red'
}

function fn(a, b) {
  console.log(this);
  console.log(a + b);
}
fn(1, 2);
fn.call(o, 1, 2);

function Father(uname, age, sex) {
  this.uname = uname;
  this.age = age;
  this.sex = sex;
}
//最主要的应用
function Son(uname, age, sex) {
  Father.call(this, uname, age, sex); //call()方法用于继承 可以继承父构造函数中的一些属性
}
let son = new Son('zx', 18, 'nan');
console.log(son);